package com.itcam.daijia.customer.service.impl;

import com.itcam.daijia.common.constant.RedisConstant;
import com.itcam.daijia.common.execption.NGException;
import com.itcam.daijia.common.result.Result;
import com.itcam.daijia.common.result.ResultCodeEnum;
import com.itcam.daijia.customer.client.CustomerInfoFeignClient;
import com.itcam.daijia.customer.service.CustomerService;
import com.itcam.daijia.model.form.customer.UpdateWxPhoneForm;
import com.itcam.daijia.model.vo.customer.CustomerLoginVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerInfoFeignClient customerInfoFeignClient;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 小程序授权登录
     *
     * @param code 微信登录时获取的 code
     * @return 返回生成的 token
     */
    @Override
    public String login(String code) {
        // 调用远程服务，通过 code 获取用户 ID
//        Result<Long> result = customerInfoFeignClient.login(code);
        Long customerId = customerInfoFeignClient.login(code).getData();
//        // 如果返回结果的状态码不是 200，则抛出异常
//        if (result.getCode().intValue() != 200) {
//            throw new NGException(result.getCode(), result.getMessage());
//        }
//        // 从返回结果中获取用户 ID
//        Long customerId = result.getData();
//        // 如果用户 ID 为空，则抛出数据错误异常
//        if (customerId == null) {
//            throw new NGException(ResultCodeEnum.DATA_ERROR);
//        }
        // 生成一个随机的 UUID 作为 token
        String token = UUID.randomUUID().toString().replaceAll("-", "");
        // 将用户 ID 和 token 关联，并存储到 Redis 中，设置过期时间
        redisTemplate.opsForValue().set(RedisConstant.USER_LOGIN_KEY_PREFIX + token, customerId.toString(), RedisConstant.USER_LOGIN_KEY_TIMEOUT, TimeUnit.SECONDS);

        // 返回生成的 token
        return token;
    }

    /**
     * 根据token获取用户信息
     *
     * @param customerId 用户ID
     * @return 用户登录信息
     */
    @Override
    public CustomerLoginVo getCustomerLoginInfo(Long customerId) {
//        // 调用远程服务获取用户登录信息
//         Result<CustomerLoginVo> result = customerInfoFeignClient.getCustomerLoginInfo(customerId);
//        // 如果返回结果的状态码不是200，则抛出异常
//         if (result.getCode().intValue() == 200) {
//             throw new NGException(result.getCode(), result.getMessage());
//         }
//        // 获取返回结果中的用户登录信息
//         CustomerLoginVo customerLoginVo = result.getData();
//        // 如果用户登录信息为空，则抛出异常
//         if (null == customerLoginVo) {
//             throw new NGException(ResultCodeEnum.DATA_ERROR);
//         }
//        // 返回用户登录信息
//        return customerLoginVo;
        return customerInfoFeignClient.getCustomerLoginInfo(customerId).getData();
    }

    /**
     * 更新用户微信手机号
     * @param updateWxPhoneForm
     * @return
     */
    @Override
    public Boolean updateWxPhoneNumber(UpdateWxPhoneForm updateWxPhoneForm) {
        customerInfoFeignClient.updateWxPhoneNumber(updateWxPhoneForm);
        return true;
    }


}
